/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package FinalCode;

import ScannerParser.*;
import java.util.*;
/**
 *
 * @author jefoutta
 */
public class CodeGenerator {
    private LinkedList<String> finalDataCode;
    private LinkedList<String> finalCode;
    private ThreeDirectionInstruction middleCode;
    private LinkedList<String> middleDataCode;

    public void setMiddleCode(ThreeDirectionInstruction tdi){
        this.middleCode = tdi;
    }

    public void setMiddleDataCode(LinkedList<String> dc){
        this.middleDataCode = dc;
    }

    public void generateFinalDataCode(){
        finalDataCode = new LinkedList();
        String[] substring = new String[2];
        finalDataCode.addLast(".model small");
        finalDataCode.addLast(".stack 64");
        finalDataCode.addLast(".data\n");
        for(int i = 0; i < middleDataCode.size(); i++){
            substring = middleDataCode.get(i).replaceAll("Program_", "").split(" ");
            finalDataCode.addLast(substring[0]+"\tDB"+"\t"+substring[1]);
        }
    }

    public void generateFinalCode(){
        finalCode = new LinkedList();
        String stringTemporal;
        Integer integerTemporal;
        finalCode.addLast(".code");
        for(int i = 0; i < middleCode.getSize(); i++){
            switch(middleCode.getTypeCode(middleCode.getType(i))){
                case 0:{
                    stringTemporal = middleCode.getInstruction(i);
                    stringTemporal = stringTemporal.split("")[1];
                    finalCode.addLast("");
                    finalCode.addLast(stringTemporal + "\tproc\tnear");
                    if(stringTemporal.equals("main")){
                        integerTemporal = middleCode.getFirstType("methodSize",i);
                        for(int j = 0; j < integerTemporal; j++){
                            finalCode.addLast("\tpush\t0d");
                        }
                    }else{
                        
                    }
                }break;
                case 1:{

                }break;
                case 2:{

                }break;
                case 3:{

                }break;
                case 4:{

                }break;
                case 5:{

                }break;
                case 6:{

                }break;
                case 7:{

                }break;
                case 8:{

                }break;
                case 9:{

                }break;
                case 10:{

                }break;
                case 11:{

                }break;
                case 12:{

                }break;
                case 13:{

                }break;
                case 14:{

                }break;
                case 15:{

                }break;
                case 16:{

                }break;
                case 17:{

                }break;
                case 18:{

                }break;
                case 19:{

                }break;
                case 20:{

                }break;
            }
        }
    }
}
